<?php

namespace System\Loader;

abstract class ClassLoaderAbstrsct extends LoaderObject implements ClassLoaderInterface
{

    /**
     * 注册类库自动加载方法
     *
     * @static
     *
     * @access public
     * @param array|string $method 类库的自动加载方法，为空则默认“loadClass”
     *        <p>
     *        当“$method”参数是数组时可以是一下几种格式：
     *        <p>
     *        1 registerAutoloader(['System\Loader\ClassLoader' => 'loadClass',])
     *        <p>
     *        2 registerAutoloader([['System\Loader\ClassLoader','loadClass',]])
     * @return void 没有返回值
     */
    public function registerAutoloader($method = 'loadClass')
    {
        self::__registerAutoloader($method);
    }

    public static function __instance()
    {
        self::__registerAutoloader();
    }

    /**
     * 注销类库自动加载方法
     *
     * @static
     * @access public
     * @param array|string $method 类库的自动加载方法
     * @return void 没有返回值
     */
    public function unregisterAutoloader($method)
    {

    }

    /**
     * 注册类库自动加载方法
     *
     * @static
     *
     * @access public
     * @param array|string $method 类库的自动加载方法，为空则默认“loadClass”
     * @return void 没有返回值
     */
    protected static function __registerAutoloader($method = 'loadClass')
    {
        if (is_array($method)) { // 是数组
            foreach ($method as $class => $methods) {
                // 注册类库自动转载方法
                if (is_array($methods)) {
                    spl_autoload_register([
                        $methods[0],
                        $methods[1]
                    ], true, true);
                } else {
                    spl_autoload_register([
                        $class,
                        $methods
                    ], true, true);
                }
            }
        } else {
            spl_autoload_register([
                self::$instance,
                $method
            ], true, true);
        }
    }



}
